package com.alibaba.otter.canal.deployer.monitor;

import com.alibaba.otter.canal.common.CanalLifeCycle;

/**
 * 监听instance file的文件变化，触发instance start/stop等操作
 *
 * 当需要对一个destination进行监听时，调用register方法
 * 当取消对一个destination监听时，调用unregister方法。
 *
 * SpringInstanceConfigMonitor和ManagerInstanceConfigMonitor
 * 都对这两个方法进行了实现
 *
 * 事实上，unregister方法在canal 内部并没有有任何地方被调用，
 * 也就是说，某个destination如果开启了autoScan=true，那么你是无法在运行时停止对其进行监控的。
 * 如果要停止，你可以选择将对应的目录删除。
 *
 *  * InstanceConfigMonitor本身并不知道哪些canal instance需要进行监控，
 *  * 因为不同的canal instance，有的可能设置autoScan为true，另外一些可能设置为false。
 *  *
 *  * 在CanalConroller的start方法中，对于autoScan为true的destination，
 *  * 会调用InstanceConfigMonitor的register方法进行注册，
 *  * 此时InstanceConfigMonitor才会真正的对这个destination配置进行扫描监听。
 *  * 对于那些autoScan为false的destination，则不会进行监听。
 *
 *
 *
 * @author jianghang 2013-2-6 下午06:19:56
 * @version 1.0.1
 */
public interface InstanceConfigMonitor extends CanalLifeCycle {

    void register(String destination, InstanceAction action);

    void unregister(String destination);
}
